5.2.1.2. En Küçük Eleman Bulma için T(n) Hesabı
Örnek:
Aşağıda bir dizi içerisindeki en küçük elamanı bulan bulEnKucuk()
adlı bir fonksiyonun kodu görülmektedir. Bu fonksiyonun yürütme zamanını
gösteren T(n) bağıntısı ayrık C dili deyimlerine göre belirleyiniz.
|
float bulEnKucuk(float A[ ]) |
|
{ |
|
float enkucuk; |
|
int k; |
|
|
|
enkucuk=A[0]; /*
ilk eleman en küçük varsayılıyor */ |
|
for(k=1; k<n; k++) |
|
if(A[k]<enkucuk) |
|
enkucuk=A[k]; |
|
return enkucuk; |
|
} |
|
Çözüm:
Programdaki ayrık C dili deyimleri numaralandırılmış satırlardaki
atama, karşılaştırma, aritmetik işlemler ve return ile sonuç gönderme
işlemleridir. Buna göre, ve
.
satırlarda birer işlem yapılmaktadır. Dolayısıyla bu iki satırın etkisi
sabit olarak 2'dir. .
satırda ise bir for döngüsü vardır; döngü kapsamında yapılanlar
hariç for deyimi içerisinde k=1; k<n, k++ gibi işlemler vardır.
Bu işlemlerden ilki 1 kez, ikincisi (n) kez, üçüncüsü de
(n-1) kez yapılır. Dolayısıyla, sadece for deyiminin yürütülmesi
için 1+n+(n-1)=2n kez işlem yapılır. .
satırda 1 tane karşılaştırma işlemi vardır ve bu işlem döngü çevrim
sayısı kadar yürütülür; dolayısıyla işlem sayısı (n-1)'dir. .
satırda ise bir atama işlemi vardır; bu işlem bir üstündeki karşılaştırma
koşulu olumlu olduğu zaman yürütülür; olumsuz ise atlanır. Eğer dizinin
ilk elemanı en küçük ise hiç yürütülmez. Dolayısıyla bu işlemin kaç kez
yürütüleceği dizi elemanlarına bağlıdır. Ancak, en kötü durumda, her zaman
koşulun olumlu olması durumun-da, döngü çevrim sayısı kadar gerçekleştirilir;
burada işlem sayısının en kötü durumda (n-1) olduğu çıkarılır.
Tüm bunlardan toplam işlem sayısını gösteren T(n), tüm satırlardaki
işlem sayılarının toplamından bulunur.
olarak bulunur.
|